package com.zjh.webShell.utils;

import com.zjh.webShell.entity.CommonCommandsCategoryDO;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class TreeUtils {

    /**
     * 获取某个节点下的所有子节点ID（包括自身）
     *
     * @param items 所有节点列表
     * @param id    要查找的节点ID
     * @return 所有子节点ID列表
     */
    public static List<Long> getAllChildIds(List<CommonCommandsCategoryDO> items, Long id) {
        List<Long> result = new ArrayList<>();
        result.add(id); // 包含自身

        // 查找直接子节点
        List<CommonCommandsCategoryDO> children = items.stream()
                .filter(item -> id.equals(item.getPid()))
                .collect(Collectors.toList());

        // 递归查找子节点的子节点
        for (CommonCommandsCategoryDO child : children) {
            result.addAll(getAllChildIds(items, child.getId()));
        }

        return result;
    }

    /**
     * 获取某个节点下的所有子节点ID（不包括自身）
     *
     * @param items 所有节点列表
     * @param id    要查找的节点ID
     * @return 所有子节点ID列表
     */
    public static List<Long> getChildIds(List<CommonCommandsCategoryDO> items, Long id) {
        List<Long> result = new ArrayList<>();

        // 查找直接子节点
        List<CommonCommandsCategoryDO> children = items.stream()
                .filter(item -> id.equals(item.getPid()))
                .collect(Collectors.toList());

        // 添加直接子节点ID
        children.forEach(child -> result.add(child.getId()));

        // 递归查找子节点的子节点
        for (CommonCommandsCategoryDO child : children) {
            result.addAll(getChildIds(items, child.getId()));
        }

        return result;
    }
}